package com.itheima.tlias84.controller;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.itheima.tlias84.config.AliyunOssConfig;
import com.itheima.tlias84.utils.OssUtil;
import com.itheima.tlias84.utils.ResultUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;

@Slf4j
@RestController
@RequestMapping("/upload")
public class UploadController {
    /*
    作业：
    1.总结阿里云oss上传流程（从创建账户开始） √
    2.书写上传工具类 OssUtil √
     */

//    @Resource
//    AliyunOssConfig config;
    @Resource
    OssUtil ossUtil;


    /**
     * 文件上传
     * MultipartFile 是Spring封装的，用于接收文件的对象
     *
     * @param file 文件对象：与前端的名字对应
     * @return 返回值
     */
    @PostMapping
    public ResultUtil upload(MultipartFile file) throws IOException {
        //参数与前端的名字对应-->MultipartFile file
        //获取参数名 --> 文件名：file
        log.info("文件名：{}", file.getName());
        //获取实际上传的文件名 --> 文件名：summer.jpg
        log.info("文件名：{}", file.getOriginalFilename());
        //上传文件,并返回文件路径url
//        String url = OssUtil.ossUpload(file);
        String url = ossUtil.ossUpload(file);
        return ResultUtil.success(url);
//        //拆分文件后缀（类型）
//        String filename = file.getOriginalFilename();
//        int index = filename.lastIndexOf(".");
//        String suffix = filename.substring(index);
//        //阿里云oss存储对象的访问路径
////        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
//        String endpoint = config.getEndpoint();
//        // 填写Bucket名称，例如examplebucket。
//        // --> 自己创建的自定义名字white-ht
////        String bucketName = "white-ht";
//        String bucketName = config.getBucketName();
//        //生成不重复id
//        String uuid = UUID.randomUUID().toString();
//        // 填写Object完整路径，完整路径中不能包含Bucket名称，例如exampledir/exampleobject.txt。
//        String objectName = uuid + suffix;
//        //转移文件到阿里云
//        //创建OSSClient实例。-->1配置环境变量，2指定访问密钥
////        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);  配置环境变量
//        OSS ossClient = new OSSClientBuilder().
////                build(endpoint, "LTAI5t9AKtSGwhkdPr19Hjdy", "TksiToiTwMViua7tEa9hPRdbbP87uM");
//        build(endpoint, config.getAccessKeyId(), config.getSecretAccessKey());
//        //上传文件
//        try {
//            ossClient.putObject(bucketName, objectName, file.getInputStream());
//            //返回文件路径url
////            String url = "https://" + bucketName + ".oss-cn-hangzhou.aliyuncs.com/" + objectName;
//            String url = config.getUrl() + objectName;
//            return ResultUtil.success(new StringBuffer(url));
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        }

        //本地磁盘路径-->不适用，应该使用网络路径↑
//               try {
//
//            String path = "F:/" + uuid + suffix;
//            //转移(复制)文件：将文件保存到指定位置--> a是自定义命名的文件名
////            file.transferTo(new File("F:/a.jpg"));
//            file.transferTo(new File(path));
//            //前端获取图片是HTTP请求路径： 网络路径获取（远程服务器），而不是磁盘路径
//            return ResultUtil.success(new StringBuffer(path));
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        }
    }


}




